package com.yc.controller;

import com.yc.web.bean.MyUserDTO;
import com.yc.service.UserService;
import com.yc.web.bean.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户登录。
     * URL: POST /auth/login
     * 无需认证。
     */
    @PostMapping("/login")
    public ResponseEntity<ResponseResult> login(@RequestBody AuthRequest authRequest) {
        try {
            AuthResponse response = userService.loginUser(authRequest);
            return ResponseEntity.ok(ResponseResult.ok().setData(response));
        } catch (IllegalArgumentException e) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ResponseResult.error(     e.getMessage())); // 401 Unauthorized
        }
    }
    /**
     * 用户注册
     *
     * @param myUserDTO 用户对象（包含用户名、密码、邮箱、手机号等）
     * @return 注册结果
     */
    @RequestMapping(  value="/register",method = RequestMethod.POST )
    public ResponseEntity<ResponseResult> register(  MyUserDTO myUserDTO) {
        try {
            MyUserDTO registeredUser = userService.register(myUserDTO);
            return ResponseEntity.status(HttpStatus.CREATED).body(ResponseResult.ok().setData(registeredUser)); // 201 Created
        } catch (IllegalArgumentException e) {
            return ResponseEntity.status(HttpStatus.CONFLICT).body(ResponseResult.error(e.getMessage())); // 409 Conflict
        }
    }
    /**
     * 注销登录状态（通常是客户端行为，服务端无状态）。
     * URL: POST /auth/logout
     * 无需认证。
     */
    @PostMapping("/logout")
    public ResponseEntity<String> logout(@RequestHeader(value = "Authorization", required = false) String token) {
        // 对于无状态 JWT，注销通常意味着客户端删除其本地存储的 Token。
        // 如果需要服务器端强制注销（例如，将 Token 加入黑名单），可以在 JwtTokenUtil 中实现。
        userService.logout(token);
        return ResponseEntity.ok("Logged out successfully (client-side token deletion).");
    }

    /**
     * 检查用户名是否存在。
     * URL: GET /auth/check-username?username=testuser
     * 无需认证。
     */
    @GetMapping("/check-username")
    public ResponseEntity<Boolean> checkUsernameExists(@RequestParam String username) {
        boolean exists = userService.checkUsernameExists(username);
        return ResponseEntity.ok(exists);
    }


}